// package com.huitong.gateway.handler;
//
// import com.alibaba.csp.sentinel.adapter.gateway.sc.callback.GatewayCallbackManager;
// import com.alibaba.csp.sentinel.slots.block.BlockException;
// import com.huitong.gateway.utils.WebFluxUtils;
// import lombok.extern.slf4j.Slf4j;
// import org.springframework.context.annotation.Configuration;
// import org.springframework.core.annotation.Order;
// import org.springframework.web.server.ServerWebExchange;
// import org.springframework.web.server.WebExceptionHandler;
// import reactor.core.publisher.Mono;
//
// import static org.springframework.core.Ordered.HIGHEST_PRECEDENCE;
//
// /**
//  * Sentinel限流异常处理
//  *
//  * @author fromdrowning
//  * @date 2024/5/23 下午5:40
//  */
// @Slf4j
// @Order(HIGHEST_PRECEDENCE)
// @Configuration
// public class SentinelFallbackHandler implements WebExceptionHandler {
//
//     /**
//      * Sentinel限流异常处理
//      *
//      * @param exchange 当前请求和响应的信息
//      * @param ex       异常信息
//      * @return 响应式对象
//      */
//     @Override
//     public Mono<Void> handle(ServerWebExchange exchange, Throwable ex) {
//         log.error("[网关异常处理] 请求路径:{} 异常信息:{}", exchange.getRequest().getPath(), ex.getMessage());
//
//         if (exchange.getResponse().isCommitted() || !BlockException.isBlockException(ex)) {
//             return Mono.error(ex);
//         }
//
//         return GatewayCallbackManager.getBlockHandler()
//             .handleRequest(exchange, ex)
//             .flatMap(response -> WebFluxUtils.webFluxResponseWriter(exchange.getResponse(), "请求超过最大数，请稍候再试"));
//     }
// }
